﻿using System;
using System.Data;
using System.Configuration;
using System.Reflection;
using System.Resources;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using Telerik.Web.UI;

/// <summary>
/// Summary description for Message
/// </summary>
public class Message
{
    public Message()
    {
    }

    public enum Type
    {
        Success, Error, Notice
    }



    /// <summary>
    /// Hàm lấy CssClass tương ứng với MessageType đầu vào
    /// </summary>
    /// <param name="messageType">loại thông báo</param>
    /// <returns>xâu css class</returns>
    private static string GetCssClass(Type messageType)
    {
        switch (messageType)
        {
            case Type.Success:
                return "label_success";
            case Type.Error:
                return "label_error";
            default:
                return "label_notice";
        }
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "message" (mặc định)
    /// </summary>
    /// <param name="page"></param>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    public static void Show(Page page, string messageID, Type messageType)
    {
        Show(page, messageID, messageType, "message");
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "message" (mặc định) không cần truyền page
    /// </summary>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    public static void Show(string messageID, Type messageType)
    {
        Show(messageID, messageType, "message");
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "tham_số_đầu_vào"
    /// </summary>
    /// <param name="page"></param>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    /// <param name="divElementID">id của div chứa thông báo</param>
    public static void Show(Page page, string messageID, Type messageType, string divElementID)
    {
        string message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "tham_số_đầu_vào"
    /// </summary>
    /// <param name="page"></param>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    /// <param name="divElementID">id của div chứa thông báo</param>
    public static void Shows(Page page, string messages, Type messageType, string divElementID)
    {
        string message = messages;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }


    /// <summary>
    /// Hiển thị thông báo lỗi Exception trên div có id="message"
    /// </summary>
    /// <param name="page">Page</param>
    /// <param name="ex">Exception</param>
    /// <param name="messageType">Loại thông báo</param>
    /// <param name="divElementID">id của div chứa thông báo</param>
    public static void Show(Page page, Exception ex, Type messageType, string divElementID)
    {
        string message = ex.ToString();
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "tham_số_đầu_vào"
    /// </summary>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    /// <param name="divElementID">id của div chứa thông báo</param>
    public static void Show(string messageID, Type messageType, string divElementID)
    {
        Page page = HttpContext.Current.Handler as Page;
        string message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }


    /// <summary>
    /// Hàm ẩn message
    /// </summary>
    /// <param name="page"></param>
    /// <param name="divElementID"></param>
    public static void Hidden(RadAjaxPanel radPanel)
    {
        string callScript = string.Format("HiddenMessage('message')");
        radPanel.ResponseScripts.Add(callScript);
    }

    /// <summary>
    /// Hiển thị thông báo có tham số (string.Format()) trên div có id = "message" (mặc định)
    /// </summary>
    /// <param name="page"></param>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    /// <param name="objects">mảng chứa các tham số cho string.Format()</param>
    public static void Show(Page page, string messageID, Type messageType, object[] objects)
    {
        Show(page, messageID, messageType, objects, "message");
    }

    /// <summary>
    /// Hiển thị thông báo có tham số (string.Fortmat()) trên div có id = "tham_số_đầu_vào"
    /// </summary>
    /// <param name="page"></param>
    /// <param name="messageID">mã của thông báo</param>
    /// <param name="messageType">loại thông báo: Success, Error, Notice</param>
    /// <param name="objects">mảng chứa các tham số cho string.Format()</param>
    /// <param name="divElementID">id của div chứa thông báo</param>
    public static void Show(Page page, string messageID, Type messageType, object[] objects, string divElementID)
    {
        string message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "message", trường hợp sử dụng RadAjaxPanel
    /// </summary>
    /// <param name="radPanel"></param>
    /// <param name="messageID"></param>
    /// <param name="messageType"></param>
    /// Tham số cuối: Trường hợp muốn viết ra một thông báo ko có trong hệ thống, cho giá trị này là true
    public static void Show(RadAjaxPanel radPanel, string messageID, Type messageType, params bool[] isMessageContent)
    {
        Show(radPanel, messageID, messageType, "message", isMessageContent);
    }


    /// <summary>
    /// Hiển thị thông báo trên div có id = "message", trường hợp sử dụng page
    /// </summary>
    /// <param name="radPanel"></param>
    /// <param name="messageID"></param>
    /// <param name="messageType"></param>
    /// Tham số cuối: Trường hợp muốn viết ra một thông báo ko có trong hệ thống, cho giá trị này là true
    public static void Show(Page page, string messageID, Type messageType, params bool[] isMessageContent)
    {
        Show(page, messageID, messageType, "message", isMessageContent);
    }

    /// <summary>
    /// Hiển thị thông báo trên div có id = "tham_số_đầu_vào", trường hợp sử dụng page
    /// </summary>
    /// <param name="radPanel"></param>
    /// <param name="messageID"></param>
    /// <param name="messageType"></param>
    /// <param name="divElementID"></param>
    public static void Show(Page page, string messageID, Type messageType, string divElementID, params bool[] isMessageContent)
    {
        string message = messageID;
        if (isMessageContent.Length > 0 && isMessageContent[0]) message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("<script type=\"text/javascript\" language=\"javascript\">showMessage('{0}', '{1}', '{2}')</script>", message, cssClass, divElementID);
        page.ClientScript.RegisterStartupScript(page.GetType(), "ShowMessage", callScript);
    }


    /// <summary>
    /// Hiển thị thông báo trên div có id = "tham_số_đầu_vào", trường hợp sử dụng RadAjaxPanel
    /// </summary>
    /// <param name="radPanel"></param>
    /// <param name="messageID"></param>
    /// <param name="messageType"></param>
    /// <param name="divElementID"></param>
    public static void Show(RadAjaxPanel radPanel, string messageID, Type messageType, string divElementID, params bool[] isMessageContent)
    {
        string message = messageID;
        if (isMessageContent.Length > 0 && isMessageContent[0]) message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("showMessage('{0}', '{1}', '{2}')", message, cssClass, divElementID);
        radPanel.ResponseScripts.Add(callScript);
    }

    public static void Show(RadAjaxPanel radPanel, string messageID, Type messageType, object[] objects)
    {
        Show(radPanel, messageID, messageType, objects, "message");
    }

    public static void Show(RadAjaxPanel radPanel, string messageID, Type messageType, object[] objects, string divElementID)
    {
        string message = messageID;
        string cssClass = GetCssClass(messageType);
        string callScript = string.Format("showMessage('{0}', '{1}', '{2}')", message, cssClass, divElementID);
        radPanel.ResponseScripts.Add(callScript);
    }

    /// <summary>
    /// Hiển thị thông báo trên hộp thoại (dialog, popup...)
    /// </summary>
    /// <remarks>Đang nghiên cứu :)</remarks>
    private static void ShowDialog()
    {
        throw new NotImplementedException();
    }
}